﻿using System;
using System.Collections.Generic;

namespace FairyGUI
{
	/// <summary>
	/// Gear is a connection between object and controller.
	/// </summary>
	public class GearDisplay : GearBase
	{
		/// <summary>
		/// Pages involed in this gear.
		/// </summary>
		public string[] pages { get; set; }

		int _visible;

		public GearDisplay(GObject owner)
			: base(owner)
		{
			_displayLockToken = 1;
		}

		override protected void AddStatus(string pageId, string value)
		{
		}

		override protected void Init()
		{
			pages = null;
		}

		override public void Apply()
		{
			_displayLockToken++;
			if (_displayLockToken == 0)
				_displayLockToken = 1;

			if (pages == null || pages.Length == 0
				|| Array.IndexOf(pages, _controller.selectedPageId) != -1)
				_visible = 1;
			else
				_visible = 0;
		}

		override public void UpdateState()
		{
		}

		public uint AddLock()
		{
			_visible++;
			return _displayLockToken;
		}

		public void ReleaseLock(uint token)
		{
			if (token == _displayLockToken)
				_visible--;
		}

		public bool connected
		{
			get { return _controller == null || _visible > 0; }
		}
	}
}
